License keys are used to facilitate access to a product, such as a software program. Typically, different products are compiled as separate programs and versions, and different license keys are assigned to the different programs and versions. This results in a proliferation of programs and versions, which is difficult to manage. In addition, this approach makes it difficult to patch various programs and versions, since a different patch is required for each program and each version. This prior art approach also causes problems when product features are altered. In particular, product feature alterations result in relatively large changes in the code base. Thus, product reinstallation and upgrade can be difficult.
It is known to use a license key with fixed field mapping. For example, a prior art license key uses twenty-three characters, where each character is mapped to a 5-bit number corresponding to each character. This direct mapping is used to indicate whether certain functionality is enabled within a product. This approach is effective in terms of enabling and disabling of functions. However, the license key size is not extensible and often the feature mappings that make sense for one product do not map well to another product. As a result, values are wasted and/or there are not enough values to cover the desired customization. It is possible to support additional features by enlarging the license key. However, this approach may become unwieldy and may create compatibility issues. For example, an enlarged license key may result in unused fields for some products.
In view of the foregoing, it would be desirable to provide an improved technique for generating and utilizing license keys.